
package com.hlkj.pay.app.merchant.ext.impl.alipay.handler;
/*
 * Hlpay-Plus aggregate payment system.
 * Copyright (c) 2024-2025 Hlpay Team Copyright has the right of final interpretation.
 */

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.hlkj.framework.common.pojo.CommonResult;
import com.hlkj.framework.common.util.json.JsonUtils;
import com.hlkj.pay.app.merchant.ext.impl.alipay.dto.AlipayConfig;
import com.hlkj.pay.common.PayResultCode;
import com.hlkj.pay.infrastructure.model.pay.ProviderChannelConfigDO;

import lombok.extern.slf4j.Slf4j;

/**
 * 汇付 商户进件参数处理
 * 
 * @author HlpayTeam
 * @date 2024/09/26 12:02
 */
@Slf4j
@Service
public class AlipayMerchantCommonParamsHandle {
    @Value("${spring.profiles.active}")
    private String active;
    public CommonResult<AlipayConfig> alipayConfig(ProviderChannelConfigDO providerChannelConfigDO, boolean test) {
        String paramsConfig = providerChannelConfigDO.getParamsConfig();
        if (StringUtils.isEmpty(paramsConfig)) {
            return CommonResult.error(PayResultCode.PAY_CHANNEL_CONFIG_NOT_EXITS);
        }
        // 配置转换
        AlipayConfig alipayConfig = null;
        try {
            alipayConfig = JsonUtils.parseObject(paramsConfig, AlipayConfig.class);
            if(!active.equals("prod")){
                log.info("支付宝非prod 环境,更新证书信息");
                alipayConfig.setAlipayPublicCertPath(alipayConfig.getAlipayPublicCertPath().replace("/www/wwwroot/pay/uploads/secret/20241218/","E:\\work\\local_file\\secret\\20241217\\"));
                alipayConfig.setRootCertPath(alipayConfig.getRootCertPath().replace("/www/wwwroot/pay/uploads/secret/20241218/","E:\\work\\local_file\\secret\\20241218\\"));
                alipayConfig.setAppCertPath(alipayConfig.getAppCertPath().replace("/www/wwwroot/pay/uploads/secret/20241218/","E:\\work\\local_file\\secret\\20241218\\"));
            }
            return CommonResult.success(alipayConfig);
        }
        catch (Exception e) {
            String format = String.format(PayResultCode.PAY_CHANNEL_CONFIG_ERROR.getMsg(), "支付宝");
            return CommonResult.error(PayResultCode.PAY_CHANNEL_CONFIG_NOT_EXITS.getCode(), format);
        }
    }

    public AlipayClient initCertificateSdk(AlipayConfig alipayConfig) throws AlipayApiException {
        // String privateKey = "<-- 请填写您的应用私钥，例如：MIIEvQIBADANB ... ... -->";
        // String alipayPublicKey = "<-- 请填写您的支付宝公钥，例如：MIIBIjANBg... -->";
        com.alipay.api.AlipayConfig alipayApiConfig = new com.alipay.api.AlipayConfig();
        alipayApiConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
        alipayApiConfig.setAppId(alipayConfig.getAppId());
        alipayApiConfig.setPrivateKey(alipayConfig.getPrivateKey());
        alipayApiConfig.setFormat("json");
        alipayApiConfig.setAlipayPublicKey(alipayConfig.getPublicKey());
        alipayApiConfig.setCharset("UTF-8");
        alipayApiConfig.setSignType("RSA2");
        alipayApiConfig.setAppCertPath(alipayConfig.getAppCertPath());
        alipayApiConfig.setAlipayPublicCertPath(alipayConfig.getAlipayPublicCertPath());
        alipayApiConfig.setRootCertPath(alipayConfig.getRootCertPath());
        return new DefaultAlipayClient(alipayApiConfig);
    }
    public AlipayClient initSdk(AlipayConfig alipayConfig) throws AlipayApiException {
        // String privateKey = "<-- 请填写您的应用私钥，例如：MIIEvQIBADANB ... ... -->";
        // String alipayPublicKey = "<-- 请填写您的支付宝公钥，例如：MIIBIjANBg... -->";
        com.alipay.api.AlipayConfig alipayApiConfig = new com.alipay.api.AlipayConfig();
        alipayApiConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
        alipayApiConfig.setAppId(alipayConfig.getAppId());
        alipayApiConfig.setPrivateKey(alipayConfig.getPrivateKey());
        alipayApiConfig.setFormat("json");
        alipayApiConfig.setAlipayPublicKey(alipayConfig.getPublicKey());
        alipayApiConfig.setCharset("UTF-8");
        alipayApiConfig.setSignType("RSA2");
        // alipayApiConfig.setAppCertPath(alipayConfig.getAppCertPath());
        // alipayApiConfig.setAlipayPublicCertPath(alipayConfig.getAlipayPublicCertPath());
        // alipayApiConfig.setRootCertPath(alipayConfig.getRootCertPath());
        return new DefaultAlipayClient(alipayApiConfig);
    }

    public static String date(String date) {
        if (!StringUtils.hasText(date)) {
            return null;
        }
        return date;
    }

    public static String licenseType(String code) {
        if (!StringUtils.hasText(code)) {
            return null;
        }
        // 营业执照类型：
        // 1：营业执照
        // 2：营业执照(多证合一)
        // 3：事业单位法人证书
        // 4：社会团体法人登记证书
        // 5：民办非企业单位登记证书
        // 6：基金会法人登记证书
        // 7：宗教活动场所登记证
        // 8：其他证书/批文/证明
        // 9：执业许可证/执业证
        // 10：基层群众性自治组织特别法人统一社会信用代码证
        // 11：农村集体经济组织登记证
        // 12：业主委员会备案证明

        // 11 营业执照
        // 12 组织机构代码证
        // 13 税务登记证
        // 14 统一社会信用代码证
        // 15 单位证明
        // 16 事业单位法人正式
        // 17 民办非企业单位登记证书
        // 18 基金会法人登记证书
        // 19 社会团体登记证书
        // 99 其它
        switch (code) {
            case "1":
            case "2":
                return "11";
            case "3":
                return "16";
            case "4":
                return "19";
            case "5":
                return "17";
            case "6":
                return "18";
            case "7":
                return "12";
            case "8":
                return "99";
            case "9":
                return "99";
            case "10":
                return "12";
            case "11":
                return "12";
            case "12":
                return "15";
            default:
                return null;
        }
    }

    public static String certType(String code) {
        if (!StringUtils.hasText(code)) {
            return null;
        }
        // 营业执照类型：
        // 1:身份证
        // 2:护照
        // 3:军官证
        // 4:士兵证
        // 5:回乡证
        // 6:户口本
        // 7:外国护照
        // 8:其他
        // 9:暂住证
        // 10:警官证
        // 11:文职干部证
        // 12:港澳台同胞通行证
        // 13:外国人居留证
        // 14:台胞证
        // 15:港澳台居住证
        // 16：营业执照 （只有部分场景才会用到 如 受益人和股东）

        // 01 身份证
        // 02 军官证
        // 03 护照
        // 04 户口簿
        // 05 士兵证
        // 06 港澳来往内地通行证
        // 07 台湾同胞来往内地通行证
        // 08 临时身份证
        // 09 外国人居留证
        // 10 警官证
        // 11 营业执照
        // 12 组织机构代码证
        // 13 税务登记证
        // 14 统一社会信用代码证
        // 15 单位证明
        // 16 事业单位法人正式
        // 17 民办非企业单位登记证书
        // 18 基金会法人登记证书
        // 19 社会团体登记证书
        // 99 其它
        switch (code) {
            case "1":
                return "01";
            case "2":
                return "03";
            case "3":
                return "02";
            case "4":
                return "05";
            case "5":
                return "99";
            case "6":
                return "04";
            case "7":
                return "03";
            case "8":
                return "99";
            case "9":
                return "99";
            case "10":
                return "10";
            case "11":
                return "99";
            case "12":
                return "06";
            case "13":
                return "09";
            case "14":
                return "07";
            case "15":
                return "99";
            case "16":
                return "11";
            default:
                return null;
        }
    }

}
